package org.ytor.core.sqlflow.builder.select;

import org.ytor.core.sqlflow.Page;

import java.util.List;
import java.util.Map;

/**
 * created by yangtong on 2025/8/11 10:06:45
 * <br/>
 * 终止操作：构建或执行查询。链式调用在此断开。
 */
public interface Terminable extends ISelect {

    /**
     * 构建 SELECT SQL
     */
    String toSql();

    /**
     * 查询一条数据, 指定成收集类型
     */
    <T> T one(Class<T> clazz);

    /**
     * 查询一条数据
     */
    <T> T one();

    /**
     * 获取符合条件的所有数据，收集成Map
     */
    List<Map<String, Object>> listMap();

    /**
     * 查询列表数据, 指定成收集类型
     */
    <T> List<T> list(Class<T> clazz);

    /**
     * 查询列表数据
     */
    <T> List<T> list();

    /**
     * 查询分页数据, 指定成收集类型
     */
    <T> Page<T> page(Integer pageNo, Integer pageSize, Class<T> clazz);

    /**
     * 查询分页数据
     */
    <T> Page<T> page(Integer pageNo, Integer pageSize);

    /**
     * 查询总数据量
     */
    Long count();
}
